// 引入小程序兼容版本的加密库
import JSEncrypt from 'jsencrypt/bin/jsencrypt.min.js'
import CryptoJS from 'crypto-js/crypto-js.js'

// AES加密配置（保持与原逻辑一致）
const key = CryptoJS.enc.Utf8.parse("5f4dcc3b5aa765d61d8327deb882cf99"); // 密钥（16位）
const iv = CryptoJS.enc.Utf8.parse('1234567890qwerty'); // 偏移量（16位）

// RSA公钥
const pubKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDRUCVBWNvzDe2IUSZ8/fSfPioFZj0k+hbIoqKclMceIEXwcrzQn1eYb/odNQTX9tJsGXbbVaki3zF0AOmXL/8kpRlhAls8FJMUx8aS/H6n+k2/TMFFDhOGSrCth/UeUcIouzyTh1e5ZaYT/ssFmt3+3GLzpVyvabV3DizW11mloQIDAQAB'

/**
 * AES解密
 * @param {String} word 加密字符串
 * @returns 解密后字符串
 */
export function decrypt(word) {
  try {
    // 小程序环境下需要处理编码转换
    const encryptedHexStr = CryptoJS.enc.Hex.parse(word);
    const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
    const decrypt = CryptoJS.AES.decrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
    return decryptedStr || word; // 解密失败时返回原字符串避免报错
  } catch (e) {
    console.error('AES解密失败:', e);
    return word;
  }
}

export function decryptnew(word) {
  const encryptedHexStr = CryptoJS.enc.Base64.parse(word);
  const srcs = CryptoJS.enc.Base64.stringify(encryptedHexStr);
  const decrypt = CryptoJS.AES.decrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  });
  const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString() || word;
}

/**
 * AES加密
 * @param {String} word 需加密字符串
 * @returns 加密后字符串
 */
export function encrypt(word) {
  try {
    const srcs = CryptoJS.enc.Utf8.parse(word);
    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
      iv: iv,
      mode: CryptoJS.mode.CBC,
      padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
  } catch (e) {
    console.error('AES加密失败:', e);
    return word;
  }
}

/**
 * RSA加密密码（适配小程序）
 * @param {String} word 需加密密码
 * @returns 加密后字符串
 */
export function encryptPwd(word) {
  try {
    // 实例化JSEncrypt并设置公钥
    const encrypt = new JSEncrypt();
    // 修复小程序下公钥格式问题
    encrypt.setPublicKey(`-----BEGIN PUBLIC KEY-----\n${pubKey}\n-----END PUBLIC KEY-----`);
    const encrypted = encrypt.encrypt(word);
    return encrypted || word; // 加密失败时返回原字符串
  } catch (e) {
    console.error('RSA加密失败:', e);
    return word;
  }
}